package com.powerbank.ordercenter.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.powerbank.common.enums.OrderStatus;
import com.powerbank.common.enums.OrderType;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 订单信息实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("orders")
public class Order {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 订单号
     */
    @TableField("order_no")
    private String orderNo;

    /**
     * 用户ID
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 设备ID
     */
    @TableField("device_id")
    private Long deviceId;

    /**
     * 设备编号
     */
    @TableField("device_code")
    private String deviceCode;

    /**
     * 订单类型：RENTAL-租借，PURCHASE-购买
     */
    @TableField("order_type")
    private OrderType orderType;

    /**
     * 订单状态
     */
    @TableField("order_status")
    private OrderStatus orderStatus;

    /**
     * 开始时间
     */
    @TableField("start_time")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @TableField("end_time")
    private LocalDateTime endTime;

    /**
     * 计划归还时间
     */
    @TableField("planned_return_time")
    private LocalDateTime plannedReturnTime;

    /**
     * 实际归还时间
     */
    @TableField("actual_return_time")
    private LocalDateTime actualReturnTime;

    /**
     * 租借总时长（分钟）
     */
    @TableField("total_duration")
    private Integer totalDuration;

    /**
     * 免费时长（分钟）
     */
    @TableField("free_duration")
    private Integer freeDuration;

    /**
     * 计费时长（分钟）
     */
    @TableField("charged_duration")
    private Integer chargedDuration;

    /**
     * 单价（元/小时）
     */
    @TableField("unit_price")
    private BigDecimal unitPrice;

    /**
     * 原始金额
     */
    @TableField("original_amount")
    private BigDecimal originalAmount;

    /**
     * 优惠金额
     */
    @TableField("discount_amount")
    private BigDecimal discountAmount;

    /**
     * 实际金额
     */
    @TableField("actual_amount")
    private BigDecimal actualAmount;

    /**
     * 押金金额
     */
    @TableField("deposit_amount")
    private BigDecimal depositAmount;

    /**
     * 超时费用
     */
    @TableField("overtime_fee")
    private BigDecimal overtimeFee;

    /**
     * 损坏费用
     */
    @TableField("damage_fee")
    private BigDecimal damageFee;

    /**
     * 优惠券ID
     */
    @TableField("coupon_id")
    private Long couponId;

    /**
     * 支付状态：0-未支付，1-已支付，2-部分退款，3-全额退款
     */
    @TableField("payment_status")
    private Integer paymentStatus;

    /**
     * 支付时间
     */
    @TableField("payment_time")
    private LocalDateTime paymentTime;

    /**
     * 退款金额
     */
    @TableField("refund_amount")
    private BigDecimal refundAmount;

    /**
     * 退款时间
     */
    @TableField("refund_time")
    private LocalDateTime refundTime;

    /**
     * 取消原因
     */
    @TableField("cancel_reason")
    private String cancelReason;

    /**
     * 取消时间
     */
    @TableField("cancel_time")
    private LocalDateTime cancelTime;

    /**
     * 备注
     */
    @TableField("remark")
    private String remark;

    /**
     * 创建时间
     */
    @TableField(value = "created_time", fill = FieldFill.INSERT)
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedTime;

    /**
     * 是否删除：0-否，1-是
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}